package pers.xiqingbo.web;

import pers.xiqingbo.pojo.Book;
import pers.xiqingbo.pojo.Page;
import pers.xiqingbo.service.BookService;
import pers.xiqingbo.service.impl.BookServiceImpl;
import pers.xiqingbo.utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @PackageName: pers.xiqingbo.web
 * @ClassName: BookServlet
 * @Description: 图书业务表示层
 * @Author: Schieber
 * @Date: 2021/2/19 上午 10:28
 */
public class BookServlet extends BaseServlet {
    BookService bookService = new BookServiceImpl();

    /**
     * 添加图书方法
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void addBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取页面总数量参数并+1实现添加图书后跳转定位到最后一页添加的数据页面
        int pageTotal = WebUtils.parseInt(request.getParameter("pageTotal"), 0) + 1;
        // 获取请求参数需要添加的图书对象
        Book book = WebUtils.copyParamToBean(new Book(), request.getParameterMap());
        // 调用service添加图书方法
        bookService.addBook(book);
        // 添加后前端无需接收，不用将数据共享到域
        // 请求路径重定向至图书列表页面
        response.sendRedirect(request.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageTotal);
    }

    /**
     * 删除图书方法
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void deleteBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取删除图书的请求参数id
        String strId = request.getParameter("id");
        // 调用service删除图书的方法
        int intId = WebUtils.parseInt(strId, 0);
        bookService.deleteBook(intId);
        // 添加后前端无需接收，不用将数据共享到域
        // 请求路径重定向至图书列表页面
        response.sendRedirect(request.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + request.getParameter("pageNo"));
    }

    /**
     * 修改图书方法
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void updateBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求参数，根据id查询需要修改的图书信息
        Book book = WebUtils.copyParamToBean(new Book(), request.getParameterMap());
        // 调用service通过id修改该图书信息
        bookService.updateBook(book);
        // 修改图书后不需要将数据共享到域
        // 请求路径重定向至图书列表页面
        response.sendRedirect(request.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + request.getParameter("pageNo"));
    }

    /**
     * 查询图书方法
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void queryBookById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求参数，根据id查询需要查询的图书信息
        int id = WebUtils.parseInt(request.getParameter("id"), 0);
        // 调用service通过id查询该图书信息
        Book book = bookService.queryBookById(id);
        // 需要将图书数据共享到域
        request.setAttribute("book", book);
        // 请求路径转发至图书编辑页面
        request.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(request, response);
    }

    /**
     * 查询全部图书方法
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void queryBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 查询全部图书业务，无需获取请求参数
        // 调用service查询所有图书方法
        List<Book> bookList = bookService.queryBooks();
        // 查询后前端需要接收数据，将图书数据共享到域
        request.setAttribute("bookList", bookList);
        // 请求路径转发至图书列表页面
        request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request, response);
    }

    /**
     * 处理分页功能
     *
     * @param request  接收对象
     * @param response 响应对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    protected void page(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取当前页码和分页后显示数量的请求参数
        int pageNo = WebUtils.parseInt(request.getParameter("pageNo"), 1);
        int pageSize = WebUtils.parseInt(request.getParameter("pageSize"), Page.PAGE_SIZE);
        // 调用service进行分页业务
        Page<Book> pageBook = bookService.page(pageNo, pageSize);
        pageBook.setUrl("manager/bookServlet?action=page");
        // 分页完成后将分页后的图书数据共享到域
        request.setAttribute("pageBook", pageBook);
        // 请求路径转发至图书列表页面
        request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request, response);
    }
}
